
#ifndef _BT_INTERFACE_H_
#define _BT_INTERFACE_H_

#define TASK_JSON 3
#define TASK_PIXELS 2
#define TASK_VOICE 1

// onSendDataResult retCode  0发送成功，1服务端回应发送失败，2发送超时，3本地发送失败, 4发送完毕（服务器尚未回复） 100线程停止
#define SENDRLT_SUCC 0
#define SENDRLT_SRVFAIL 1
#define SENDRLT_TMOUT 2
#define SENDRLT_FAIL 3
#define SENDRLT_END 4
#define SENDRLT_THEXIT 100


typedef struct DataInfo{
    int dataLen;
    char taskId;
    char storeId;

    DataInfo(int len,char tid,char sid){
        dataLen=len;
        taskId=tid;
        storeId=sid;
    }
}DataInfo;

class IBtSdkListener;

/*
 * SDK层，协议处理。对接收数据组包并回调，对发送数据拆包并调用蓝牙硬件发送接口
 */
class IBtSdkInterface
{
public:
	virtual ~IBtSdkInterface() {
	}
	//设置监听对象指针
	virtual void setListener(IBtSdkListener* listener) = 0;

	//接收基础包（20字节，一旦组包完成，需要反调IBtSdkListener监听者的onRecvBleData方法)
	virtual void handleBaseBlePackage(const unsigned char* data, const int dataLen) = 0;

	//发送业务数据（拆分为一级包、二级包，并反调IBtSdkListener监听者的sendToBaseBle方法进行发送） 返回0成功其他失败
	virtual int sendData(const unsigned char* businessData, const DataInfo* pinfo) = 0;
	virtual int getMTU() = 0;//获取目标mtu值（期望调整到此值 50）
	virtual int getNewMTU() = 0;//获取使用mtu（默认20）
	virtual void setNewMTU(int newMTU)=0; //设置使用mtu（如果调整成功，会更改为50）
	virtual void setPkgDelay(int delayMs)=0;

    //onNotifySendToBaseBleResult 函数参数result的取值范围
    //public static final int SENDBLERLT_SUCC=0; //蓝牙ble发送成功
    //public static final int SENDBLERLT_WFAIL=1; //写入失败
    //public static final int SENDBLERLT_NOPERM=2; //回调-无权限
    //public static final int SENDBLERLT_FAIL=3; //回调-发送失败
    //public static final int SENDBLERLT_OFAIL=4; //回调-其他失败
	virtual void onNotifySendToBaseBleResult(int result)=0;
};

/*
 * SDK监听者，既是业务处理层，也是蓝牙硬件实现层
 */

class IBtSdkListener
{
public:
	virtual ~IBtSdkListener() {
	}
	//发送基础蓝牙数据（最大20字节）[提供给蓝牙SDK调用，实现蓝牙数据发送能力]
	virtual void sendToBaseBle(const unsigned char* basePkg, int pkgLen) = 0;
	//发送业务数据的处理结果，是IBtSdkInterface.sendData()接口的发送结果回调通知。 retCode=0发送成功，其他失败
	virtual void onSendDataResult(int retCode, int dataLen, char taskId, char storeId) = 0;
	//通知业务层：收到设备端完整业务数据
	virtual void onRecvBleData(const unsigned char* businessData, const DataInfo* dataInfo) = 0;

};
#endif /* _BT_INTERFACE_H_ */
